/**
 * @param {number[]} nums
 */
const Solution = function (nums) {
  this.nums = nums || [];
};

/**
 * Resets the array to its original configuration and return it.
 * @return {number[]}
 */
Solution.prototype.reset = function () {
  return this.nums;
};

/**
 * Returns a random shuffling of the array.
 * @return {number[]}
 */
Solution.prototype.shuffle = function () {
  let a = this.nums.slice();
  for (let i = 0; i < a.length; i++) {
    let rand = Math.floor(Math.random() * (a.length - i)) + i;
    let tmp = a[i];
    a[i] = a[rand];
    a[rand] = tmp;
  }
  return a;
};

/**
 * Your Solution object will be instantiated and called as such:
 * var obj = Object.create(Solution).createNew(nums)
 * var param_1 = obj.reset()
 * var param_2 = obj.shuffle()
 */
